package 扩展类

import (
	字符集类 "gitee.com/go_888/extends/goframe/gcharset"
	"unicode/utf8"
)

// X编码是否为gbk 检查给定的字节集是否符合GBK编码。
// 这个函数的存在是因为在某些情况下，需要区分数据是使用GBK编码还是UTF-8编码。
// 参数:
// 字节集 []byte: 需要检查的字节序列。
// 返回值:
// bool: 如果字节集符合GBK编码，则返回true；否则返回false。
func X编码是否为gbk(字节集 []byte) bool {
	// 注意：此函数通过判断双字节字符是否在gbk编码范围内来实现，
	// 而utf-8编码格式的每个字节都在gbk编码范围内。
	// 因此，在调用IsGBK()之前，应先调用utf8.valid()来检查它是否不是utf-8编码，
	// 然后调用IsGBK()来检查gbk编码。例如如下所示
	if utf8.Valid(字节集) {
		return false
	}

	i := 0
	for i < len(字节集) {
		// 检查单字节字符，GBK编码中单字节字符的值不会超过0xff
		if 字节集[i] <= 0xff {
			i++
			continue
		} else {
			// 检查双字节字符，确保它们在GBK编码范围内
			if i+1 < len(字节集) &&
				字节集[i] >= 0x81 &&
				字节集[i] <= 0xfe &&
				字节集[i+1] >= 0x40 &&
				字节集[i+1] <= 0xfe &&
				字节集[i+1] != 0xf7 {
				i += 2
				continue
			} else {
				// 如果字符不在GBK编码范围内，则返回false
				return false
			}
		}
	}

	// 如果所有字符都符合GBK编码规则，则返回true
	return true
}

// X编码是否为utf8 检查给定的字节集是否构成有效的UTF-8编码。
// 参数 字节集 []byte 是待检查的字节序列。
// 返回值 bool 表示字节集是否为有效的UTF-8编码。
// 此函数使用utf8.Valid函数进行判断，该函数返回true表示有效，false表示无效。
func X编码是否为utf8(字节集 []byte) bool {
	// 使用utf8.Valid函数验证字节集是否为有效的UTF-8编码。
	if utf8.Valid(字节集) {
		// 如果字节集是有效的UTF-8编码，返回true。
		return true
	} else {
		// 如果字节集不是有效的UTF-8编码，返回false。
		return false
	}
}

// X编码utf8到gbk 将一个UTF-8编码的字符串转换为GBK编码。
// 这个函数接受一个UTF-8编码的字符串作为输入，尝试将其转换为GBK编码的字符串。
// 它返回两个值：转换后的字符串和一个可能的错误对象。
// 如果转换过程中发生错误，错误对象将提供有关问题的详细信息。
func X编码utf8到gbk(文本 string) (string, error) {
	// 使用字符集类的UTF8转换字符集方法将输入的UTF-8编码字符串转换为GBK编码。
	// 这里指定目标字符集为"gbk"。
	return 字符集类.UTF8转换字符集("gbk", 文本)
}

// X编码gbk到utf8 将GBK编码的字符串转换为UTF-8编码。
// 参数:
// 文本 - GBK编码的字符串。
// 返回值:
// 转换后的UTF-8编码字符串。
// 可能发生的错误。
func X编码gbk到utf8(文本 string) (string, error) {
	// 使用字符集类.X转换到UTF8方法进行编码转换。
	return 字符集类.X转换到UTF8("gbk", 文本)
}
